package com;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

/*
给定一个经过编码的字符串，返回它解码后的字符串。

编码规则为: k[encoded_string]，表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的；输入字符串中没有额外的空格，且输入的方括号总是符合格式要求的。

此外，你可以认为原始数据不包含数字，所有的数字只表示重复的次数 k ，例如不会出现像3a或2[4]的输入。


示例 1：

输入：s = "3[a]2[bc]"
输出："aaabcbc"
示例 2：

输入：s = "3[a2[c]]"
输出："accaccacc"
示例 3：

输入：s = "2[abc]3[cd]ef"
输出："abcabccdcdcdef"
示例 4：

输入：s = "abc3[cd]xyz"
输出："abccdcdcdxyz"

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/decode-string
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Test {

    public static void main(String[] args) {

        List<String> param = new ArrayList<>();
        param.add("3[a]2[bc]");
        param.add("3[a2[c]]");
        param.add("2[abc]3[cd]ef");
        param.add("abc3[cd]xyz");

        List<String> answer = new ArrayList<>();
        answer.add("aaabcbc");
        answer.add("accaccacc");
        answer.add("abcabccdcdcdef");
        answer.add("abccdcdcdxyz");

        int total_case = param.size();
        int success_case = 0;
        com.solution.stack.Solution solution = new com.solution.stack.Solution();
        for ( int i = 0 ; i < total_case ; i++ ) {
            String result = solution.decodeString(param.get(i));
            if ( answer.get(i).equals(result) )
                success_case++;
        }

        DecimalFormat df = new DecimalFormat();
        df.setMaximumFractionDigits(2);
        df.setMinimumFractionDigits(2);
        String percentage = df.format((double) success_case / total_case * 100.00) + "%";
        System.out.println("测试案例通过率：" + percentage);

    }
}
